1 using System.Collections.Generic;
2 using
Assets.Scripts.Signals;
3 using
UnityEngine;
4
5 namespace
Assets.Scripts.Network
6 {
7     
public class NetworkAdapter : Photon.MonoBehaviour, INetworkService
8     {
9         
public Signal OnBeginConnectingSignal { get; private set; }
10
11         
public Signal OnConnectedToMasterSignal { get; private set; }
12
13         
public Signal OnDisconnectedFromMasterSignal { get; private set; }
14
15         
public Signal<string> OnConnectionFailSignal { get; private set; }
16
17         
public Signal OnJoinedRoomSignal { get; private set; }
18
19         
public Signal OnAllPlayersConnectedSignal { get; private set; }
20
21         
public Signal<Seed, int, int> OnRemoteBoardChangeSignal { get; private set; }
22
23         
public Signal OnNewGameStartedSignal { get; private set; }
24
25         
public string PlayerName
26         {
27             
get
28             {
29                 
if (PhotonNetwork.connected)
30                 {
31                     
return PhotonNetwork.playerName;
32                 }
33                 
return PlayerPrefs.GetString("playerName", "Player" + Random.Range(1, 9999));
34             }
35             
set
36             {
37                 PhotonNetwork.playerName =
value;
38                 PlayerPrefs.SetString(
"playerName", PhotonNetwork.playerName);
39             }
40         }
41
42         
public string OpponentName
43         {
44             
get
45             {
46                 
if (PhotonNetwork.connected && PhotonNetwork.otherPlayers.Length > 0)
47                 {
48                     
return PhotonNetwork.otherPlayers[0].name;
49                 }
50                 
return "Player O";
51             }
52         }
53
54         
public bool HasAllPlayers
55         {
56             
get
57             {
58                 
return PhotonNetwork.connected && PhotonNetwork.room != null && PhotonNetwork.room.playerCount == 2;
59             }
60         }
61
62         
public bool IsMaster
63         {
64             
get { return PhotonNetwork.isMasterClient; }
65         }
66
67         
public bool IsConnected
68         {
69             
get { return PhotonNetwork.connected; }
70         }
71
72         
public void Connect()
73         {
74             
if (!PhotonNetwork.connected)
75             {
76                 OnConnectedToMasterSignal.Dispatch();
77
78                 PhotonNetwork.playerName = PlayerName;
79                 PhotonNetwork.ConnectUsingSettings(
"v1.0");
80             }
81             
else
82             {
83                 OnConnectedToMaster();
84             }
85         }
86
87         
public void Disconnect()
88         {
89             PhotonNetwork.Disconnect();
90         }
91
92         
public void JoinRoom(string roomName)
93         {
94             PhotonNetwork.JoinRoom(roomName);
95         }
96
97         
public void JoinRandomRoom()
98         {
99             PhotonNetwork.JoinRandomRoom();
100         }
101
102         
public void CreateRoom(string roomName)
103         {
104             PhotonNetwork.CreateRoom(roomName,
new RoomOptions() { maxPlayers = 2 }, TypedLobby.Default);
105         }
106
107         
public List<string> GetRoomList()
108         {
109             List<
string> list = new List<string>();
110
111             
foreach (var roomInfo in PhotonNetwork.GetRoomList())
112             {
113                 
if (roomInfo.playerCount == 1)
114                 {
115                     list.Add(roomInfo.name);
116                 }
117             }
118
119             
return list;
120         }
121
122         
public void SendNewGameStarted()
123         {
124             
if (PhotonNetwork.room != null && PhotonNetwork.room.playerCount == 2)
125             {
126                 photonView.RPC(
"OnNewGameStart", PhotonTargets.OthersBuffered);
127             }
128         }
129
130         
public void SendBoardChange(Seed seed, int row, int col)
131         {
132             
if (PhotonNetwork.room != null && PhotonNetwork.room.playerCount == 2)
133             {
134                 photonView.RPC(
"OnRemoteBoardChange", PhotonTargets.OthersBuffered, (int)seed, row, col);
135             }
136         }
137
138         
private void Awake()
139         {
140             OnBeginConnectingSignal =
new Signal();
141             OnConnectedToMasterSignal =
new Signal();
142             OnDisconnectedFromMasterSignal =
new Signal();
143             OnConnectionFailSignal =
new Signal<string>();
144             OnJoinedRoomSignal =
new Signal();
145             OnAllPlayersConnectedSignal =
new Signal();
146             OnRemoteBoardChangeSignal =
new Signal<Seed, int, int>();
147             OnNewGameStartedSignal =
new Signal();
148
149             ServiceLocator.AddService<INetworkService>(
this);
150         }
151
152         
private void OnDestroy()
153         {
154             ServiceLocator.RemoveService<INetworkService>();
155         }
156
157         
private void OnConnectedToMaster()
158         {
159             OnConnectedToMasterSignal.Dispatch();
160         }
161
162         
private void OnDisconnectedFromPhoton()
163         {
164             OnDisconnectedFromMasterSignal.Dispatch();
165         }
166
167         
private void OnFailToConnectToPhoton()
168         {
169             OnConnectionFailSignal.Dispatch(
"Connection failed doe to invalid AppId or some network issues");
170         }
171
172         
private void OnConnectionFail(DisconnectCause cause)
173         {
174             OnConnectionFailSignal.Dispatch(
"Connection failed doe to " + cause);
175         }
176
177         
private void OnJoinedRoom()
178         {
179             OnJoinedRoomSignal.Dispatch();
180             CheckForAllPlayers();
181         }
182
183         
private void OnPhotonPlayerConnected(PhotonPlayer player)
184         {
185             CheckForAllPlayers();
186         }
187
188         
private void CheckForAllPlayers()
189         {
190             
if (PhotonNetwork.room.playerCount == 2)
191             {
192                 OnAllPlayersConnectedSignal.Dispatch();
193             }
194         }
195
196         
private void OnPhotonPlayerDisconnected(PhotonPlayer player)
197         {
198             Disconnect();
199         }
200
201         
[RPC]
202         
private void OnNewGameStart()
203         {
204             OnNewGameStartedSignal.Dispatch();
205         }
206
207         
[RPC]
208         
private void OnRemoteBoardChange(int seed, int row, int col)
209         {
210             OnRemoteBoardChangeSignal.Dispatch((Seed)seed, row, col);
211         }
212
213         
private void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
214         {
215         }
216     }
217 }



Trò chơi Tic-Tac-Toe, game đánh caro full source code 53.525 lượt xem

Gõ tìm kiếm nhanh...